package fr.dauphine.bookstore.backoffice;

import javax.servlet.http.HttpSession;

import fr.dauphine.bookstore.modele.Author;
import fr.dauphine.bookstore.modele.Book;
import fr.dauphine.bookstore.modele.Category;
import fr.dauphine.bookstore.modele.User;

/**
 * Back office SessionUtil.
 */
public final class SessionUtil {

	/**
	 * Categorie creee/modifiee.
	 */
	private static final String SESSION_CATEGORY_KEY = "SESSION_BACK_OFFICE_CATEGORY";

	/**
	 * Livre cree/modifie.
	 */
	private static final String SESSION_BOOK_KEY = "SESSION_BACK_OFFICE_BOOK";

	/**
	 * Auteur cree/modifie.
	 */
	private static final String SESSION_AUTHOR_KEY = "SESSION_BACK_OFFICE_AUTHOR";

	/**
	 * Utilisateur cree/modifie.
	 */
	private static final String SESSION_USER_KEY = "SESSION_BACK_OFFICE_USER";

	/**
	 * Constructeur prive.
	 */
	private SessionUtil() {
	}

	/**
	 * Retourne la categorie creee/modifiee depuis la session.
	 * 
	 * @param session
	 *            Session
	 * @return Categorie creee/modifiee
	 */
	public static Category getCategory(final HttpSession session) {
		return (Category) session.getAttribute(SESSION_CATEGORY_KEY);
	}

	/**
	 * Retourne le livre cree/modifie depuis la session.
	 * 
	 * @param session
	 *            Session
	 * @return Livre cree/modifie
	 */
	public static Book getBook(final HttpSession session) {
		return (Book) session.getAttribute(SESSION_BOOK_KEY);
	}

	/**
	 * Retourne l'auteur cree/modifie depuis la session.
	 * 
	 * @param session
	 *            Session
	 * @return Auteur cree/modifie
	 */
	public static Author getAuthor(final HttpSession session) {
		return (Author) session.getAttribute(SESSION_AUTHOR_KEY);
	}

	/**
	 * Retourne l'utilisateur cree/modifie depuis la session.
	 * 
	 * @param session
	 *            Session
	 * @return Utilisateur cree/modifie
	 */
	public static User getUser(final HttpSession session) {
		return (User) session.getAttribute(SESSION_USER_KEY);
	}

	/**
	 * Met a jour la categorie creee/modifiee dans la session.
	 *
	 * @param session
	 *            Session
	 * @param category
	 *            Categorie
	 */
	public static void setCategory(final HttpSession session, final Category category) {
		session.setAttribute(SESSION_CATEGORY_KEY, category);
	}

	/**
	 * Met a jour le livre cree/modifie dans la session.
	 *
	 * @param session
	 *            Session
	 * @param book
	 *            Livre
	 */
	public static void setBook(final HttpSession session, final Book book) {
		session.setAttribute(SESSION_BOOK_KEY, book);
	}

	/**
	 * Met a jour l'auteur cree/modifie dans la session.
	 *
	 * @param session
	 *            Session
	 * @param author
	 *            Auteur
	 */
	public static void setAuthor(final HttpSession session, final Author author) {
		session.setAttribute(SESSION_AUTHOR_KEY, author);
	}

	/**
	 * Met a jour l'utilisateur cree/modifie dans la session.
	 *
	 * @param session
	 *            Session
	 * @param user
	 *            Utilisateur
	 */
	public static void setUser(final HttpSession session, final User user) {
		session.setAttribute(SESSION_USER_KEY, user);
	}

	/**
	 * Retire la categorie creee/modifiee de la session.
	 *
	 * @param session
	 *            Session
	 */
	public static void removeCategory(final HttpSession session) {
		session.removeAttribute(SESSION_CATEGORY_KEY);
	}

	/**
	 * Retire le livre cree/modifie de la session.
	 *
	 * @param session
	 *            Session
	 */
	public static void removeBook(final HttpSession session) {
		session.removeAttribute(SESSION_BOOK_KEY);
	}

	/**
	 * Retire l'auteur cree/modifie de la session.
	 *
	 * @param session
	 *            Session
	 */
	public static void removeAuthor(final HttpSession session) {
		session.removeAttribute(SESSION_AUTHOR_KEY);
	}

	/**
	 * Retire l'utilisateur cree/modifie de la session.
	 *
	 * @param session
	 *            Session
	 */
	public static void removeUser(final HttpSession session) {
		session.removeAttribute(SESSION_USER_KEY);
	}
}
